4a
Files — one surface, two view filters (变更 / 全部)
The changed-files surface absorbs full workdir browsing instead of gaining a sibling entry. 变更 stays the default and unchanged; 全部 adds the tree (desktop) and a drill-down list (mobile). The two views are stitched by status: files touched this session keep their M/A/D mark everywhere, folders carry a subtree change count, and every row opens the same viewer.
DESKTOP
(a) HAS CHANGES
cc-pocket · fix webpack chunk split
± 3
>_
↑ pill h20 · r5 · pad 0/8 · mono 11/600
(b) ZERO CHANGES
cc-pocket · rate limiter backoff
>_
↑ same 26×20 geometry as >_ chip — entry never disappears
CENTERED OVERLAY · 全部 VIEW (shown 860w of max 1040)
▾
src
5
▾
ui
3
FilesSheet.kt
A
Composer.kt
M
SheetScrim.kt
D
Theme.kt
▸
net
2
Main.kt
▸
gradle
▾
node_modules
.package-lock.json
已显示前 2000 项,其余已折叠
build.gradle.kts
M
README.md
src/ui/FilesSheet.kt
A
+184
−0
tree row h26 · indent step 14
status dot 14×14 r7 · bg tint 16%
folder badge h15 r4 · min-w15
segmented h24 r6 · pad 2 · pill r4
INSET · 变更 VIEW (unchanged)
{{ f.add }}
{{ f.del }}
{{ f.s }}
Switching views keeps the selected file and the right pane. Untouched file → right pane shows full text, no diff stat in the header. Hidden-file eye toggle applies to both views and persists per workdir.
MOBILE · 390pt
FILES SHEET · 全部 (DRILL-DOWN)
9:41cc-pocket
文件
root
›
src
›
ui
components
2
›
theme
›
FilesSheet.kt
A
Composer.kt
M
Theme.kt
Tokens.kt
已显示前 2000 项,其余已折叠
↑ row h44 · breadcrumb h32 · segmented h30 r8 · badge h17 r5 · dot 18×18
FILES SHEET · 变更 (DEFAULT)
⋯ TOOLS SHEET ROW (SOURCE ENTRY)
文件
{{ f.add }}
{{ f.del }}
{{ f.s }}
›
↑ changed row h56 (two-line) · tools row h48 · grabber 36×4
VIEWER · CHANGED FILE
‹
Composer.kt
M
Diff
全文
+ onFilesClick = { open(FilesTab.CHANGES) }
− onFilesClick = { openDiffModal() }
↑ lands on Diff · tab underline 2px #D97757
VIEWER · UNTOUCHED FILE
‹
Theme.kt
Diff
全文
internal object Tokens {
val Surface = Color(0xFF1E2125)
↑ Diff tab disabled #4A4E55 · 全文 active